package top.minuy.util.generate;

import java.util.Random;

/**
 * 数组生成
 * @author Minuy
 * @time 19:02
 * @date 2021/8/12
 */
public class ArrayGenerator {
    private ArrayGenerator(){}

    public static Integer[] generateOrderedArray(int n,int s){
        return generateOrderedArray(n);
    }
    /***
     * 生成一个顺序整型数组
     * @param n 数组长度
     * @return 数组变量
     */
    public static Integer[] generateOrderedArray(int n){

        Integer[] arr = new Integer[n];
        for(int i = 0; i < n ; i ++){
            arr[i] = i;
        }
        return arr;
    }

    public static Integer[] generateSpecialArray(int n,int s){
        return generateSpecialArray(n);
    }
    public static Integer[] generateSpecialArray(int n){
        Integer[] arr = generateOrderedArray(n);
        qsDecode(arr,0,n);
        return arr;
    }

    private static void qsDecode(Integer[] arr,int l,int r){
        if(l>=(r-1)){
            return;
        }
        int p = swapQs(arr,l,r);
        qsDecode(arr,l,p);
        qsDecode(arr,p+1,r);
    }

    private static int swapQs(Integer[] arr,int l,int r){
        int t = (r-l)/2+l;
        swap(arr,t,l);
        return l;
    }

    private static <E> void swap(E[] arr, int l, int r) {
        E temp = arr[l];
        arr[l] = arr[r];
        arr[r] = temp;
    }

    /***
     * 生成一个倒序整型数组
     * @param n 数组长度
     * @return 数组变量
     */
    public static Integer[] generateRandomArray(int n,int bound){

        Integer[] arr = new Integer[n];
        Random random = new Random();
        for(int i = 0; i < n ; i ++){
            arr[i] = random.nextInt(bound);
        }
        return arr;
    }
}
